// src/hooks/useErrorHandler.ts
import { useToast } from '@chakra-ui/react';
import { useEffect } from 'react';
import { errorHandler } from '../utils/errorHandler';

/**
 * 错误处理 Hook
 */
export function useErrorHandler() {
  const toast = useToast();

  // 初始化错误处理器的 Toast 实例
  useEffect(() => {
    errorHandler.setToast(toast);

    // 检查浏览器兼容性
    errorHandler.checkBrowserCompatibility();
  }, [toast]);

  /**
   * 处理错误的便捷函数
   */
  const handleError = (error: unknown, context?: string) => {
    errorHandler.handleError(error, context);
  };

  /**
   * 创建错误处理的高阶函数
   */
  const withErrorHandling = <T extends any[], R>(
    fn: (...args: T) => Promise<R>,
    context?: string
  ) => {
    return async (...args: T): Promise<R | void> => {
      try {
        return await fn(...args);
      } catch (error) {
        handleError(error, context);
      }
    };
  };

  return {
    handleError,
    withErrorHandling,
    errorHandler
  };
}
